package com.tbit.uqbike.service.business;

import com.tbit.common.entity.view.Result;
import com.tbit.uqbike.object.pojo.Coupon;
import com.tbit.uqbike.object.pojo.CouponGiftLog;
import com.tbit.uqbike.object.pojo.CouponUser;
import com.tbit.uqbike.object.pojo.dto.CouponBatchGiftDTO;
import com.tbit.uqbike.object.pojo.dto.PackageDelayDTO;
import com.tbit.uqbike.object.pojo.vo.GiveRideCardVo;
import com.tbit.uqbike.object.value.LoginInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author chenmengran
 * @Description: 优惠券
 * @date 2019\12\27 002716:43
 */
public interface CouponService {

    /**
     * 添加优惠券
     *
     * @param loginInfo
     * @param coupon
     */
    void add(LoginInfo loginInfo, Coupon coupon);

    /**
     * 分页查找
     *
     * @param loginInfo
     * @param accountId
     * @param pageNO
     * @param rowCount
     * @return
     */
    List<Coupon> queryPage(LoginInfo loginInfo, Integer accountId, Integer pageNO, Integer rowCount);

    /**
     * 查询数量
     *
     * @param accountId
     * @return
     */
    Integer queryCount(Integer accountId);

    /**
     * 获取对应优惠券
     *
     * @param couponId
     * @return
     */
    Coupon getBycouponId(Integer couponId);

    /**
     * 获取运营区域下的优惠券
     *
     * @param accountId
     * @return
     */
    List<Coupon> getCouponIsVail(Integer accountId);

    /**
     * 更新
     *
     * @param coupon
     */
    void update(Coupon coupon);

    /**
     * 用户优惠券分页
     *
     * @param
     * @return
     */
    List<CouponUser> getByUserIdPage(Integer userId, Integer accountId, Integer pageNO, Integer pageSize);

    /**
     * 用户优惠券分页总数
     *
     * @param
     * @return
     */
    Integer getByUserIdCount(Integer userId, Integer accountId);

    /**
     * 批量赠送用户优惠券
     *
     * @param couponUser
     */
    void addBatch(CouponUser couponUser, Integer num, Long endTime, Boolean sendMessage, LoginInfo loginInfo);

    void userCouponEdit(Integer couponUserId, @Param("userId") Integer userId);

    /**
     * 批量添加优惠劵
     *
     * @param giftDTO 对象
     * @return 添加结果
     */
    Result<List<GiveRideCardVo>> addBatchCoupons(CouponBatchGiftDTO giftDTO);

    void modifyCouponExpireTime(PackageDelayDTO delayDTO);

    /**
     * 优惠劵赠送记录查询
     *
     * @param couponGiftLog 查询条件
     * @return 。
     */
    List<CouponGiftLog> listCouponGiftLog(CouponGiftLog couponGiftLog, Date startTime, Date endTime);

    /**
     * 根据用户id和区域id集合获取最近优惠劵赠送记录
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     */
    CouponUser selectByAccountIdList(Integer userId, List<Integer> accountIdList);
}
